console.error('app/middleware/console.js');

// options === app.config.console
module.exports = (options, app) => {
  return async function robotMiddleware(ctx, next) {
    // 请求级别的，没有请求时不执行这里；也就是说项目初始化时不会执行这里；
    console.log('app/middleware/console.js ----');

    // 正是因为中间件时请求级别的， 所以不应该把下面的代码放在这里，否则每次请求都执行，浪费资源。

    // console.log('app/middleware/console.js 123456789');
    // ctx.loog = function() {
    //   if (app.config.diyEnv == 'development') {
    //     console.log.apply(null, arguments);
    //   }
    // };
    
    // ctx.log = function(promptMessage, data) {
    //   if (app.config.diyEnv == 'development') {
    //     if (data == undefined) {
    //       console.log(promptMessage);
    //       console.log('第二个参数 data == undefined 是 true');
    //     } else {
    //       console.log('');
    //       console.log('>>>> ' + promptMessage + ' 开始');
    //       try {
    //         console.log(new Error(promptMessage));
    //       } catch(e) {
    //         // 
    //       }

    //       // console.log('\r\n>>>>---- ' + promptMessage + ' 开始 ----');
    //       console.log('==== typeof 的结果 ====');
    //       console.log(typeof data);
    //       console.log('==== 要打印的对象 ==== ');
    //       console.log(data);
    //       // 因为可能存在递归引用，此时字符串化会报错，所以使用try catch 来处理；
    //       try {
    //         console.log('==== 要打印的对象字符串化 ====');
    //         console.log(JSON.stringify(data));
    //       } catch (e) {
    //         if (e.message === 'Converting circular structure to JSON') {
    //           console.log('---- Converting circular structure to JSON 所以无法字符串化输出');
    //         }
    //         // 
    //       }
    //       console.log('---- ' + promptMessage + ' 结束 ----<<<<\r\n');
    //     }
    //   }
    // };

    // ctx.info = function() {
    //   if (app.config.diyEnv == 'development') {
    //     console.info.apply(null, arguments);
    //   }
    // };

    // ctx.warn = function() {
    //   if (app.config.diyEnv == 'development') {
    //     console.warn.apply(null, arguments);
    //   }
    // };

    // ctx.error = function() {
    //   if (app.config.diyEnv == 'development') {
    //     console.error.apply(null, arguments);
    //   }
    // };

    await next();
  }
};